import { normalizeData } from "../../src/utils";

describe("normalizeData", () => {
    it("should return an empty object if the input is an empty object", () => {
        expect(normalizeData({})).toEqual({});
    });

    it("should return the same data if input is neither an array nor an object", () => {
        const input = "some string";
        expect(normalizeData(input)).toBe(input);
    });

    it("should flatten the attributes of an object with attributes", () => {
        const input = {
            id: "1",
            attributes: {
                name: "John",
                age: 30,
            },
        };
        const expectedOutput = {
            id: "1",
            name: "John",
            age: 30,
        };
        expect(normalizeData(input)).toEqual(expectedOutput);
    });

    it("should handle nested data objects and arrays", () => {
        const input = {
            data: [
                {
                    id: "1",
                    attributes: {
                        name: "John",
                        age: 30,
                        address: {
                            data: {
                                id: "100",
                                attributes: {
                                    street: "123 Main St",
                                    city: "New York",
                                    country: "USA",
                                },
                            },
                        },
                        hobbies: {
                            data: [
                                {
                                    id: "200",
                                    attributes: {
                                        name: "Reading",
                                    },
                                },
                                {
                                    id: "201",
                                    attributes: {
                                        name: "Running",
                                    },
                                },
                            ],
                        },
                    },
                },
            ],
        };

        const expectedOutput = [
            {
                id: "1",
                name: "John",
                age: 30,
                address: {
                    id: "100",
                    street: "123 Main St",
                    city: "New York",
                    country: "USA",
                },
                hobbies: [
                    {
                        id: "200",
                        name: "Reading",
                    },
                    {
                        id: "201",
                        name: "Running",
                    },
                ],
            },
        ];

        expect(normalizeData(input)).toEqual(expectedOutput);
    });

    it("should handle null data", () => {
        const input = {
            data: null,
        };
        expect(normalizeData(input)).toBeNull();
    });
});
